import java.util.HashMap;
import java.util.Map;

class Solution {
    // public int longestSubsequence(int[] arr, int difference) {
    //     // 创建dp表、初始化、填表、返回值
    //     int n = arr.length;
    //     int[] dp = new int[n];

    //     Arrays.fill(dp, 1);

    //     for (int i = 1; i < n; i++) { // 为整个dp数组赋值
    //         int a = arr[i], b = arr[i] - difference;
    //         for (int j = i-1; j >= 0; j--) { // 求单个dp值
    //             if (arr[j] == b) {
    //                 dp[i] = dp[j] + 1;
    //                 break; // 只需要找到距离i最近的一个即可
    //             }
    //         }
    //     }

    //     int ret = 0;
    //     for (int i = 0; i < n; i++) {
    //         ret = Math.max(ret, dp[i]);
    //     }

    //     return ret;
    // }


    public int longestSubsequence(int[] arr, int difference) {
        Map<Integer, Integer> hash = new HashMap<>();
        int ret = 1;
        for (int a : arr) {
            hash.put(a, hash.getOrDefault(a - difference, 0) + 1);
            ret = Math.max(ret, hash.get(a));
        }
        return ret;
    }
}